#ifndef ALL_HEADER_H
#define ALL_HEADER_H

#include <arpa/inet.h>
#include <crypt.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <pthread.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/epoll.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#include <mysql/mysql.h>
#include <sys/sendfile.h>



// CHECK_RETURN
#define ERROR_RETURN(tag, expect, revalue) \
	{                                      \
		if(tag == expect) {                \
			if(revalue == 0)               \
				return;                    \
			else {                         \
				return revalue;            \
			}                              \
		}                                  \
	}

// pthread 函数族错误解析
#define ERROR_CHECK_PTHREAD(res, back_num)                     \
	{                                                          \
		if(back_num)                                           \
			fprintf(stderr, "%s,%s", res, strerror(back_num)); \
	}

// 检查命令行参数数量是否符合预期
#define ARGS_CHECK(argc, expected)                \
	do {                                          \
		if((argc) != (expected)) {                \
			fprintf(stderr, "args num error!\n"); \
			\ 
            exit(1);                              \
			\       
                                                                                                                                                                                                                                                                                                                                                                                                                                            \
		}                                         \
		\                          
                                                                                                                                                                                                                                                                                                              \
	} while(0)

// 检查返回值是否是错误标记,若是则打印msg和错误信息
#define ERROR_CHECK(ret, error_flag, msg) \
	do {                                  \
		if((ret) == (error_flag)) {       \
			perror(msg);                  \
			exit(1);                      \
		}                                 \
	} while(0)
#endif
